#include "scaledplot.h"
#include "ui_scaledplot.h"
#include <QDebug>

ScaledPlot::ScaledPlot(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ScaledPlot){
	ui->setupUi(this);

	connect(ui->horizontalScrollBar, SIGNAL(valueChanged(int)), SLOT(setCurrentHorizontalPosition(int)));
	connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), SLOT(setCurrentVerticalPosition(int)));
	connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), SLOT(updateHorizontalScale()));
	connect(ui->verticalSlider, SIGNAL(valueChanged(int)), SLOT(updateVerticalScale()));
}

ScaledPlot::~ScaledPlot(){
    delete ui;
}

void ScaledPlot::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}


QwtPlot * ScaledPlot::qwtPlot(){
	return ui->qwtPlot;
}

void ScaledPlot::setHorizontalLength(int l){
//	qDebug()<<"setHorizontalLength"<<l;
	ui->horizontalScrollBar->setMaximum(l);
}

void ScaledPlot::setVerticalLength(int l){
	ui->verticalScrollBar->setMaximum(l);
}

void ScaledPlot::setCurrentHorizontalPosition(int pos){
//	qDebug()<<"setCurrentHorizontalPosition"<<pos<<' '<<ui->horizontalSlider->value();
	ui->qwtPlot->setAxisScale(QwtPlot::xBottom, pos, pos + ui->horizontalSlider->value());
	ui->qwtPlot->replot();
}

void ScaledPlot::setCurrentVerticalPosition(int pos){
	pos = ui->verticalScrollBar->maximum()/2 - pos - ui->verticalSlider->value()/2;
//	qDebug()<<"setCurrentVerticalPosition"<<pos;
	ui->qwtPlot->setAxisScale(QwtPlot::yLeft, pos, pos + ui->verticalSlider->value());
	ui->qwtPlot->replot();
}

/** Обновить горизонтальный масштаб.*/
void ScaledPlot::updateHorizontalScale(){
//	qDebug()<<"updateHorizontalScale";
	setCurrentHorizontalPosition(ui->horizontalScrollBar->value());
}

/** Обновить вертикальный масштаб.*/
void ScaledPlot::updateVerticalScale(){
//	qDebug()<<"updateVerticalScale";
	setCurrentVerticalPosition(ui->verticalScrollBar->value());
}

void ScaledPlot::replot(){
	updateVerticalScale();
	updateHorizontalScale();
}
